#include "ControladorJuego.h"


ControladorJuego::ControladorJuego() {

	modelo = NULL;
	vista = NULL;

	tiempoSimulacion = -1;
	tiempoRenderizado = -1;

	SDL_InitSubSystem(SDL_INIT_TIMER);

}


ControladorJuego::~ControladorJuego() {

	if (SDL_WasInit(SDL_INIT_TIMER) != 0 )

		SDL_QuitSubSystem(SDL_INIT_TIMER);

}

void ControladorJuego::setManejadorModelo(ManejadorModelo* manejador) {

	modelo = manejador;
}

void ControladorJuego::setManejadorVista(ManejadorVista* manejador) {

	vista = manejador;
}

bool ControladorJuego::tiemposAsignados() {

	return tiemposValidos;
}


bool ControladorJuego::establecerTiempoSimulacion(int tiempo) {

	if (tiempoRenderizado != -1 && tiempo > 0 && tiempo < tiempoRenderizado) {

		tiempoSimulacion = tiempo;

		if (SDL_WasInit(SDL_INIT_TIMER) != 0)

			tiemposValidos = true;
	}
		
	return tiemposValidos;
}

bool ControladorJuego::establecerTiempoDeRefresco(int tiempo) {
	
	if ( tiempo > 0 )

		tiempoRenderizado = tiempo;

	return (tiempoRenderizado != -1) ? true : false;
}

bool ControladorJuego::iniciar() {

	Uint32	fin = 0;
	Uint32	inicio = 0;

	if (tiemposValidos == true ) {

		SDL_Event evento;
		bool enEjecucion = true;

		SDL_Event eventoUsuario;
		eventoUsuario.type = SDL_USEREVENT;

		while (enEjecucion) {

			while (SDL_PollEvent(&evento)) {

				if (evento.type == SDL_QUIT)

					enEjecucion = false;
			}

			inicio = SDL_GetTicks();

			modelo->simular();

			if (modelo->huboCambios() == true)

				vista->cambioElModelo();

			//
			vista->cambioElModelo();

			fin = SDL_GetTicks();

			SDL_Delay(tiempoRenderizado - (fin - inicio));

			SDL_Delay(1000);

			SDL_PushEvent(&eventoUsuario);
		}

	}



	return tiemposValidos;
}